#include <string>
#include <istream>
#include "Vacina.h"
#include "Vacina.h"

    /**********************************************************************
        Classe: Vacina
        Funcionalidade: Guarda informações básicas da Vacina
    ***********************************************************************/
using namespace std;

/*Metodo que retorna os frascos relativos a uma vacina especifica*/
list<Frasco> &Vacina::getFrascos(){
    return frascos;
}

//Construtor para a classe Vacina
Vacina::Vacina(string descricaoVacina, int idadeMinVacina, int idadeMaxVacina,
		double precoVacina) {
	descricao = descricaoVacina;
	idadeMin = idadeMinVacina;
	idadeMax = idadeMaxVacina;
	preco = precoVacina;
	numFrascos=0;
}

//Implementacao dos metodos get e set

/*Metodo para adicionar uma nova vacina enviando os parametros da descricao da vacina,
  idade minina da vacina, idade maxima da vacina e preco da vacina*/
void Vacina::setVacina(string descricaoVacina, int idadeMinVacina,
		int idadeMaxVacina, double precoVacina) {
	descricao = descricaoVacina;
	idadeMin = idadeMinVacina;
	idadeMax = idadeMaxVacina;
	preco = precoVacina;
}

/*Metodo para adicionar a descricao de uma vacina*/
void Vacina::setDescricao(string descricaoVacina){
    descricao=descricaoVacina;
}

/*Metodo para adicionar a idade minima de uma vacina*/
void Vacina::setIdadeMin(int idade){
    idadeMin=idade;
}

/*Metodo para adicionar a idade maxima de uma vacina*/
void Vacina::setIdadeMax(int idade){
    idadeMax=idade;
}

/*Metodo para adicionar o preco de uma vacina*/
void Vacina::setPreco(double precoVacina){
    preco=precoVacina;
}

/*Metodo para obter a descricao de uma vacina*/
string Vacina::getDescricao() const {
	return descricao;
}

/*Metodo para obter a idade minima de uma vacina*/
int Vacina::getIdadeMin() const {
	return idadeMin;
}

/*Metodo para obter a idade maxima de uma vacina*/
int Vacina::getIdadeMax() const {
	return idadeMax;
}

/*Metodo para obter o preco de uma vacina*/
double Vacina::getPreco() const {
	return preco;
}

/*Metodo para adicionar um frasco vinculado a uma vacina*/
void Vacina::addFrasco(int codRotulo) {
	frascos.push_back(Frasco(codRotulo, this));
	numFrascos++;
}

/*Metodo para remover um frasco relativo a uma vacina*/
Frasco * Vacina::removeFrasco() {
	if (frascos.size() == 0)
		return NULL;
	Frasco &temp = frascos.front();
	frascos.pop_front();
	numFrascos--;
	return &temp;
}

//Destrutor padrao para a classe Vacina
Vacina::~Vacina() {

}
